import type { ConfigEnv, UserConfig } from 'vite'
import { defineConfig } from 'vite'
import { viteConfigureBuild } from './vite/config/build'
import { viteConfigurePlugins } from './vite/config/plugins'
import { HAS_SIDE_EFFECTS_FILES } from './vite/config/shared'
import { Logger } from './vite/utils/logger'
import { ModuleSideEffectsProcessor } from './vite/utils/module_processor'

// 构建配置：https://vitejs.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  const isProduction = mode === 'production'
  const moduleProcessor = new ModuleSideEffectsProcessor(HAS_SIDE_EFFECTS_FILES)

  Logger.info(`启动环境构建：${mode}`, 'ViteConfig  ')

  return {
    logLevel: isProduction ? 'warn' : 'info',
    // server: { // 添加开发服务器配置
    //   port: 8080,
    //   cors: true,
    //   strictPort: true,
    //   hmr: { // 热模块替换配置
    //     overlay: false, // 禁用错误覆盖层
    //   },
    //   watch: {
    //     usePolling: true, // 解决部分系统文件监听问题
    //   },
    // },
    build: {
      ...viteConfigureBuild(isProduction),
      rollupOptions: {
        treeshake: {
          preset: 'recommended',
          // 手动指定不摇树的模块
          moduleSideEffects: (id: string, _external: boolean): boolean => {
            return moduleProcessor.shouldPreserveSideEffects(id)
          },
        },
      },
    },
    plugins: viteConfigurePlugins(isProduction),
    // 环境变量配置
    define: {
      '__APP_ENV__': JSON.stringify(mode),
      'process.env.NODE_ENV': JSON.stringify(mode),
    },
  }
})
